/**
  ******************************************************************************
  * @file           : oled.h
  * @author         : admin
  * @brief          : None
  * @attention      : None
  * @date           : 2024/10/9
  ******************************************************************************
  */

#ifndef OLED_H
#define OLED_H
#include <U8g2lib.h>
#include <Arduino.h>
#define OLEDADDR 0X3C
enum eROTATION {
    eROTATION_0,
    eROTATION_180
};
class oled {
    public:
        oled();
        ~oled();
        void init();
        void setCursorLine(int number);
        template <typename T>
        void printLine(const T &str) {
            if (CursorLine <=4 && CursorLine >=1){
                u8g2_12864.setDrawColor(0);        // 设置绘制颜色为背景
                u8g2_12864.drawBox(0, CursorLine*16 -16, 128, 16); // 绘制与第二行相同高度的矩形
                u8g2_12864.setDrawColor(1);        // 设置绘制颜色为背景
                u8g2_12864.setCursor(0, CursorLine*16 -3);
                u8g2_12864.print(String(str).c_str());
                u8g2_12864.sendBuffer();
            }

        }
        void setCursor(int x, int y);
        void fillInLine(int line,int Screen);
        template <typename T>
        void print(const T &str) {
            u8g2_12864.print(String(str).c_str());
            u8g2_12864.sendBuffer();
        }
        void fillScreen(int Screen);
        void setRotaion(eROTATION e);
        void point(int x,int y);
        void line(int x1,int y1,int x2,int y2);
        void fillCircle(int x,int y,int radius);
        void drawCircle(int x,int y,int radius);
        void rect(int x,int y,int w,int h,bool isFill);


    private:
        int CursorLine = 1;
        U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2_12864;
};

extern oled display;
#endif //XYXKC_ESP32_E_OLED_H
